package form;

import com.example.demo.pdfbox.PdfGenerator;
import com.example.demo.pdfbox.common.PdfBorder;
import com.example.demo.pdfbox.common.enums.BorderStyle;
import com.example.demo.pdfbox.common.enums.Rectangle;
import com.example.demo.pdfbox.tabel.PdfPage;
import com.example.demo.pdfbox.tabel.PdfParagraph;
import com.example.demo.pdfbox.tabel.PdfTable;
import com.example.demo.pdfbox.tabel.concrete.PdfGraph;
import com.example.demo.pdfbox.tabel.concrete.PdfLine;
import com.example.demo.pdfbox.tabel.concrete.PdfPicture;
import com.example.demo.pdfbox.tabel.concrete.PdfText;
import com.example.demo.pdfbox.tabel.form.PdfColumn;
import com.example.demo.pdfbox.tabel.form.PdfForm;
import com.example.demo.pdfbox.tabel.form.PdfRow;
import org.apache.pdfbox.io.IOUtils;

import java.awt.*;
import java.io.IOException;
import java.util.Objects;

public class FormTest2 {
    public static void main(String[] args) throws IOException {
        // pdf表
        PdfTable pdfTable = new PdfTable();
        // 添加页，默认A4，边距正常
        PdfPage pdfPage = new PdfPage();


        // 外表格 共三列
        PdfForm outForm = new PdfForm(3, new float[]{180, 180, 180});
        PdfBorder pdfBorder = new PdfBorder();
        pdfBorder.setBorderColor(Color.BLACK);
        pdfBorder.setBorderSize(1f);
        pdfBorder.setBorderStyle(BorderStyle.SOLID);
        pdfBorder.setBorderTangle(Rectangle.ALL_BORDER);
        pdfBorder.setRadio(5f);
        outForm.setPdfBorder(pdfBorder);

        // 外表格第一行
        PdfRow pdfRow = new PdfRow();
        pdfRow.setHeight(100);
        // pdfRow.setMinHeight(10);
        // 外表格一行一列
        PdfColumn pdfColumn = new PdfColumn();
        pdfBorder = new PdfBorder();
        pdfBorder.setBorderColor(Color.GREEN);
        pdfBorder.setBorderSize(1f);
        pdfBorder.setBorderStyle(BorderStyle.SOLID);
        pdfBorder.setBorderTangle(Rectangle.ALL_BORDER);
        // 内表格一
        PdfForm innerForm1 = new PdfForm(2, new float[]{80, 80});
        // innerForm1.setX(15);
        // innerForm1.setY(10);
        innerForm1.setPdfBorder(pdfBorder);
        // 内表格一 第一行
        PdfRow innerForm1Row = new PdfRow();
        innerForm1Row.setHeight(60);
        PdfParagraph pdfParagraph = new PdfParagraph();
        PdfText pdfText = new PdfText();
        pdfText.setName("column11 ");
        pdfParagraph.addTextList(pdfText);
        pdfText = new PdfText();
        pdfText.setName("aaaaaaaaaaa bbbbbbbbbbb");
        pdfParagraph.addTextList(pdfText);
        // 内表格一 第一列
        PdfColumn innerColumn11 = new PdfColumn();
        innerColumn11.addElement(pdfParagraph);
        innerForm1Row.addColumn(innerColumn11);
        // 内表格一 第二列
        PdfColumn innerColumn12 = new PdfColumn();
        PdfLine pdfLine = new PdfLine();
        pdfLine.setX(10);
        pdfLine.setY(10);
        pdfLine.setX1(0f).setY1(0f).setX4(50f).setY4(0f);
        innerColumn12.addElement(pdfLine);

        innerForm1Row.addColumn(innerColumn12);
        innerForm1.addRowList(innerForm1Row);
        // 添加内表格一
        pdfColumn.addElement(innerForm1);
        pdfRow.addColumn(pdfColumn);


        // 外表格一行二列
        PdfColumn outColumn2 = new PdfColumn();
        // 内表格二
        PdfForm innerForm2 = new PdfForm(2, new float[]{80, 80});
        // innerForm2.setY(10);
        // innerForm2.setX(10);
        innerForm2.setPdfBorder(pdfBorder);
        // 内表格二第二行
        PdfRow innerForm2Row = new PdfRow();
        innerForm2Row.setHeight(40);
        // 内表格二第一列
        PdfColumn innerColumn21 = new PdfColumn();
        PdfPicture picture = new PdfPicture();
        picture.setX(5);
        picture.setY(35);
        byte[] imageByte = IOUtils.toByteArray(Objects.requireNonNull(PdfGenerator.class.getClassLoader().getResourceAsStream("logo.png")));
        picture.setHeight(30).setWidth(30).setImage(imageByte);
        innerColumn21.addElement(picture);
        innerForm2Row.addColumn(innerColumn21);
        // 内表格二第二列
        PdfColumn innerColumn22 = new PdfColumn();
        PdfText pdfText1 = new PdfText();
        pdfText1.setName("column22 ");
        innerColumn22.addElement(pdfText1);
        innerForm2Row.addColumn(innerColumn22);
        innerForm2.addRowList(innerForm2Row);
        // 添加内表格二
        outColumn2.addElement(innerForm2);
        pdfRow.addColumn(outColumn2);


        // 外表格一行三列
        PdfColumn outColumn3 = new PdfColumn();
        PdfForm innerForm3 = new PdfForm(2, new float[]{80, 80});
        innerForm3.setPdfBorder(pdfBorder);
        PdfRow innerForm3Row = new PdfRow();
        innerForm3Row.setHeight(80);
        PdfGraph pdfGraph = circleGraph(40, -40, 30);
        pdfGraph.setFillColor(Color.ORANGE);
        PdfColumn innerColumn31 = new PdfColumn();
        innerColumn31.addElement(pdfGraph);
        innerForm3Row.addColumn(innerColumn31);
        PdfColumn innerColumn32 = new PdfColumn();
        innerForm3Row.addColumn(innerColumn32);
        innerForm3.addRowList(innerForm3Row);
        outColumn3.addElement(innerForm3);
        pdfRow.addColumn(outColumn3);

        // 外表格第一行
        outForm.addRowList(pdfRow);
        pdfPage.addElement(outForm);
        pdfTable.addPage(pdfPage);

        PdfGenerator pdfGenerator = new PdfGenerator();
        pdfGenerator.generatePdf(pdfTable, "D:\\mypdf.pdf");
    }

    public static PdfGraph circleGraph(float x, float y, float r) {
        float h = (float) ((1 - Math.cos(Math.PI / 4)) / Math.sin(Math.PI / 4) * r*4 / 3 );
        PdfGraph pdfGraph = new PdfGraph();
        // 一象限
        pdfGraph.addLine(new PdfLine().setX1(x+r).setY1(y).setX2(x+r).setY2(y+h).setX3(x+h).setY3(y+r).setX4(x).setY4(y+r).setColor(Color.BLACK));
        // 二象限
        pdfGraph.addLine(new PdfLine().setX1(x).setY1(y+r).setX2(x-h).setY2(y+r).setX3(x-r).setY3(y+h).setX4(x-r).setY4(y).setColor(Color.GREEN));
        // 三象限
        pdfGraph.addLine(new PdfLine().setX1(x-r).setY1(y).setX2(x-r).setY2(y-h).setX3(x-h).setY3(y-r).setX4(x).setY4(y-r).setColor(Color.RED).setWidth(5f));
        // 四象限
        pdfGraph.addLine(new PdfLine().setX1(x).setY1(y-r).setX2(x+h).setY2(y-r).setX3(x+r).setY3(y-h).setX4(x+r).setY4(y).setColor(Color.BLUE));
        return pdfGraph;
    }
}
